Dart dart2native
dart2native
是一个命令行工具,用于将 Dart 源代码提前(AOT)编译为本地 x64 机器代码。该命令支持在 Windows、macOS 和 Linux 上运行。其输出可以是独立的可执行文件(默认)或者可以通过 Dart dartaotruntime 命令运行的 AOT 快照。
源码阅读
原理:该工具执行分为几个步骤:
- generateAotKernel:通过代码生成 Dart AOT Kernel 中间语法表示
- generateAotSnapshot:进一步生成 Dart AOT Snapshot
- 如果要生成 Dart aot-snapshot,到这一步就结束了
- 如果要生成 Dart exe,执行以下步骤:
- writeAppendedExecutable:输出最终的产物
- markExecutable:chmod 添加可运行权限
源码:
使用
编译独立可执行文件
使用 dart2native
创建独立可执行文件的示例:
$ dart2native bin/main.dart -o bin/my_app
您可以像其他可执行文件一样分发和运行该可执行文件。
编译 AOT 快照
要创建 AOT 快照,可以在命令中添加 -k aot
:
$ dart2native bin/main.dart -k aot
然后可以使用 dartaotruntime
命令运行应用程序。
与 Dart compile aot-snapshot 关系
dart2native
和 Dart compile aot-snapshot 在功能上有一些相似之处,但也存在一些关键区别。
相似性:
- 目的:两者都用于将 Dart 源代码提前(AOT)编译为本地机器代码。
- 支持平台:两者都支持在 Windows、macOS 和 Linux 上运行。
区别:
- 输出类型:
dart2native
可以生成独立的可执行文件或 AOT 快照。独立可执行文件包括 Dart 文件及其依赖项的本地机器代码,以及一个小型 Dart 运行时。dart compile aot-snapshot
专注于生成 AOT 快照,这是一种中间表示,可以与 Dart 运行时一起使用,但不包括完整的 Dart 运行时。
已知限制
- 无交叉编译支持
- 无签名支持
- 不支持
dart:mirrors
和dart:developer
选项
-D <key>=<value>
或--define=<key>=<value>
:定义环境声明--enable-asserts
:启用断言语句-h
或--help
:显示所有选项的帮助-k (aot|exe)
或--output-kind=(aot|exe)
:指定输出类型-o <path>
或--output=<path>
:生成输出到<path>
-v
或--verbose
:显示更多信息
dart2aot
在 Dart 2.6 之前的版本包含了名为 dart2aot
的工具,用于生成 AOT 快照。dart2native
命令取代了 dart2aot
,并具有 dart2aot
功能的超集。
本文作者:Maeiee
本文链接:Dart dart2native
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!